
#ifndef  RAWTYPEUTIL_H
#define  RAWTYPEUTIL_H

#include "common.h"

template<typename T>
class RawType {
public:
    RawType(const T v):v(v) {}
    ~RawType(){}
    T get() { return v; }
    void set(const T v) { this->v = v; }
private:
    T v;
};

class RawTypeUtil{

    static void deleteRaw(void * ptr);
    template<typename T> 
    static RawType<T> * newRaw(const T v) {
        return new RawType<T>(v);
    }
    static RawType<int8_t> * newInt8(const int8_t v){
        return newRaw(v);
    }
    static RawType<int16_t> * newInt16(const int16_t v){
        return newRaw(v);
    }
    static RawType<int32_t> * newInt32(const int32_t v){
        return newRaw(v);
    }
    static RawType<int64_t> * newInt64(const int64_t v){
        return newRaw(v);
    }

    static RawType<uint8_t> * newUint8(const uint8_t v){
        return newRaw(v);
    }
    static RawType<uint16_t> * newUint16(const uint16_t v){
        return newRaw(v);
    }
    static RawType<uint32_t> * newUint32(const uint32_t v){
        return newRaw(v);
    }
    static RawType<uint64_t> * newUint64(const uint64_t v){
        return newRaw(v);
    }
};



#endif   /* RAWTYPEUTIL_H */
